/**
 * 血缘图主题配置工具
 * 根据当前主题动态调整血缘图的样式
 */

export interface LineageThemeConfig {
  // 节点样式
  nodeBorderColor: string;
  nodeTextOutlineColor: string;
  nodeTextColor: string;
  
  // 边样式
  edgeTextColor: string;
  edgeTextBackgroundColor: string;
  
  // 高亮样式
  highlightColor: string;
  selectedColor: string;
  
  // 背景色
  backgroundColor: string;
  containerBackground: string;
}

/**
 * 获取血缘图主题配置
 * @param token Ant Design 主题 token
 * @returns 血缘图主题配置
 */
export const getLineageThemeConfig = (token: any): LineageThemeConfig => {
  const isDark = token.colorBgLayout === '#0f172a' ||
                 token.colorBgLayout === '#0a0e13' ||
                 token.colorBgContainer === '#1e293b';

  // 检测是否为拟物风格主题
  const isNeumorphism = token.colorBgLayout &&
                       (token.colorBgLayout.includes('linear-gradient') ||
                        token.colorBgContainer === '#f8fafc');

  return {
    // 节点样式 - 拟物风格优化
    nodeBorderColor: isNeumorphism ? 'rgba(255, 255, 255, 0.8)' :
                     isDark ? token.colorBgElevated || '#334155' : '#ffffff',
    nodeTextOutlineColor: isNeumorphism ? 'rgba(30, 41, 59, 0.1)' :
                         isDark ? token.colorBgLayout || '#0f172a' : '#000000',
    nodeTextColor: '#ffffff', // 节点文字始终为白色，因为节点背景是彩色的

    // 边样式 - 拟物风格优化
    edgeTextColor: isNeumorphism ? '#1e293b' :
                   isDark ? token.colorText || '#f1f5f9' : '#333333',
    edgeTextBackgroundColor: isNeumorphism ? 'rgba(248, 250, 252, 0.9)' :
                            isDark ? token.colorBgContainer || '#1e293b' : '#ffffff',

    // 高亮样式 - 拟物风格优化
    highlightColor: isNeumorphism ? '#f59e0b' : '#ff7875',
    selectedColor: isNeumorphism ? '#6366f1' :
                   isDark ? '#52c41a' : '#1890ff',

    // 背景色 - 拟物风格优化
    backgroundColor: isNeumorphism ? 'linear-gradient(135deg, #e2e8f0 0%, #f1f5f9 50%, #faf5ff 100%)' :
                     isDark ? token.colorBgLayout || '#0f172a' : '#ffffff',
    containerBackground: isNeumorphism ? 'rgba(248, 250, 252, 0.8)' :
                        isDark ? token.colorBgContainer || '#1e293b' : '#ffffff'
  };
};

/**
 * 获取 Cytoscape 样式配置
 * @param themeConfig 主题配置
 * @param nodeSize 节点大小
 * @returns Cytoscape 样式数组
 */
export const getCytoscapeStyles = (themeConfig: LineageThemeConfig, nodeSize: number = 80) => [
  // 基础节点样式
  {
    selector: 'node',
    style: {
      'background-color': 'data(color)',
      'label': 'data(label)',
      'text-valign': 'center',
      'text-halign': 'center',
      'color': themeConfig.nodeTextColor,
      'font-size': '12px',
      'font-weight': 'bold',
      'text-wrap': 'wrap',
      'text-max-width': `${nodeSize * 0.8}px`,
      'width': nodeSize,
      'height': nodeSize,
      'border-width': 3,
      'border-color': themeConfig.nodeBorderColor,
      'text-outline-width': 2,
      'text-outline-color': themeConfig.nodeTextOutlineColor,
      'shape': 'round-rectangle'
    }
  },
  
  // 选中节点样式
  {
    selector: 'node:selected',
    style: {
      'border-color': themeConfig.selectedColor,
      'border-width': 4,
      'overlay-color': themeConfig.selectedColor,
      'overlay-opacity': 0.3
    }
  },
  
  // 基础边样式
  {
    selector: 'edge',
    style: {
      'width': 3,
      'line-color': '#1890ff',
      'target-arrow-color': '#1890ff',
      'target-arrow-shape': 'triangle',
      'curve-style': 'bezier',
      'label': 'data(label)',
      'font-size': '10px',
      'text-rotation': 'autorotate',
      'text-margin-y': -10,
      'color': themeConfig.edgeTextColor,
      'text-background-color': themeConfig.edgeTextBackgroundColor,
      'text-background-opacity': 0.9,
      'text-background-padding': '3px'
    }
  },
  
  // 选中边样式
  {
    selector: 'edge:selected',
    style: {
      'line-color': '#ff4d4f',
      'target-arrow-color': '#ff4d4f',
      'width': 4
    }
  },
  
  // 高亮样式
  {
    selector: '.highlighted',
    style: {
      'background-color': themeConfig.highlightColor,
      'line-color': themeConfig.highlightColor,
      'target-arrow-color': themeConfig.highlightColor,
      'border-color': '#ff4d4f',
      'border-width': 6,
      'z-index': 999,
      'transition-property': 'background-color, line-color, target-arrow-color, border-color',
      'transition-duration': '0.3s'
    }
  },
  
  // 淡化样式
  {
    selector: '.dimmed',
    style: {
      'opacity': 0.3,
      'transition-property': 'opacity',
      'transition-duration': '0.3s'
    }
  },
  
  // 搜索高亮样式
  {
    selector: '.search-highlighted',
    style: {
      'background-color': '#ff4d4f',
      'border-color': '#ff7875',
      'border-width': 6,
      'overlay-color': '#ff4d4f',
      'overlay-opacity': 0.3,
      'z-index': 999
    }
  },
  
  // 搜索淡化样式
  {
    selector: '.search-dimmed',
    style: {
      'opacity': 0.2
    }
  }
];

/**
 * 获取任务级别的 Cytoscape 样式配置
 * @param themeConfig 主题配置
 * @param nodeSize 节点大小
 * @returns 任务级别的 Cytoscape 样式数组
 */
export const getTaskLevelCytoscapeStyles = (themeConfig: LineageThemeConfig, nodeSize: number = 200) => [
  // 任务节点样式
  {
    selector: 'node[type="task"]',
    style: {
      'background-color': (ele: any) => {
        const importance = ele.data('importance') || 0;
        if (importance > 15) return '#ff4d4f'; // 高重要性 - 红色
        if (importance > 10) return '#fa8c16'; // 中等重要性 - 橙色
        return '#1890ff'; // 普通重要性 - 蓝色
      },
      'label': 'data(label)',
      'text-valign': 'center',
      'text-halign': 'center',
      'color': themeConfig.nodeTextColor,
      'font-size': '14px',
      'font-weight': 'bold',
      'text-wrap': 'wrap',
      'text-max-width': (ele: any) => `${nodeSize * (ele.data('size_multiplier') || 1) * 0.75}px`,
      'width': (ele: any) => nodeSize * (ele.data('size_multiplier') || 1),
      'height': (ele: any) => nodeSize * 0.6 * (ele.data('size_multiplier') || 1),
      'border-width': 4,
      'border-color': themeConfig.nodeBorderColor,
      'text-outline-width': 2,
      'text-outline-color': themeConfig.nodeTextOutlineColor,
      'shape': 'round-rectangle'
    }
  },
  
  // 任务依赖边样式
  {
    selector: 'edge[type="task_dependency"]',
    style: {
      'width': 6,
      'line-color': 'data(edge_color)',
      'target-arrow-color': 'data(edge_color)',
      'target-arrow-shape': 'triangle',
      'target-arrow-size': 20,
      'curve-style': 'bezier',
      'label': 'data(label)',
      'font-size': '12px',
      'text-rotation': 'autorotate',
      'text-margin-y': -20,
      'color': themeConfig.edgeTextColor,
      'text-background-color': themeConfig.edgeTextBackgroundColor,
      'text-background-opacity': 0.9,
      'text-background-padding': '4px',
      'text-border-color': 'data(edge_color)',
      'text-border-width': 1,
      'text-border-opacity': 0.8
    }
  },
  
  // 选中节点样式
  {
    selector: 'node:selected',
    style: {
      'border-color': themeConfig.selectedColor,
      'border-width': 6,
      'overlay-color': themeConfig.selectedColor,
      'overlay-opacity': 0.3
    }
  },
  
  // 高亮样式
  {
    selector: '.highlighted',
    style: {
      'background-color': themeConfig.highlightColor,
      'line-color': themeConfig.highlightColor,
      'target-arrow-color': themeConfig.highlightColor,
      'border-color': '#ff4d4f',
      'border-width': 6,
      'z-index': 999,
      'transition-property': 'background-color, line-color, target-arrow-color, border-color',
      'transition-duration': '0.3s'
    }
  },
  
  // 淡化样式
  {
    selector: '.dimmed',
    style: {
      'opacity': 0.3
    }
  },
  
  // 搜索高亮样式
  {
    selector: '.search-highlighted',
    style: {
      'background-color': '#ff4d4f',
      'border-color': '#ff7875',
      'border-width': 6,
      'overlay-color': '#ff4d4f',
      'overlay-opacity': 0.3,
      'z-index': 999
    }
  },
  
  // 搜索淡化样式
  {
    selector: '.search-dimmed',
    style: {
      'opacity': 0.2
    }
  }
];

/**
 * 节点类型颜色配置
 */
export const NODE_COLORS = {
  source_table: '#1890ff',
  target_table: '#52c41a', 
  temp_table: '#faad14',
  view: '#722ed1',
  kafka_topic: '#f5222d',
  cdc_source: '#fa8c16',
  catalog: '#13c2c2',
  connector: '#eb2f96',
  unknown_table: '#666666',
  task: '#1890ff'
};

/**
 * 节点类型图标配置
 */
export const NODE_ICONS = {
  source_table: '📊',
  target_table: '🎯',
  temp_table: '⚡',
  view: '👁️',
  kafka_topic: '📨',
  cdc_source: '🔄',
  catalog: '📁',
  connector: '🔌',
  unknown_table: '❓',
  task: '⚙️'
};
